package com.example.timingapplication

import android.content.Context
import android.content.SharedPreferences

/**
 * 应用设置管理类，封装SharedPreferences操作
 */
class SettingsManager private constructor(context: Context) {
    companion object {
        const val PREFS_NAME = "timing_settings"
        
        // 时间设置键名
        const val MORNING_HOUR = "morning_hour"
        const val MORNING_MINUTE = "morning_minute"
        const val NOON_HOUR = "noon_hour"
        const val NOON_MINUTE = "noon_minute"
        const val EVENING_HOUR = "evening_hour"
        const val EVENING_MINUTE = "evening_minute"
        
        @Volatile
        private var INSTANCE: SettingsManager? = null
        
        fun getInstance(context: Context): SettingsManager {
            return INSTANCE ?: synchronized(this) {
                INSTANCE ?: SettingsManager(context).also { INSTANCE = it }
            }
        }
    }
    
    private val prefs: SharedPreferences = context.applicationContext.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
    
    /**
     * 获取早晨任务时间（小时）
     */
    fun getMorningHour(defaultValue: Int = 9): Int {
        return prefs.getInt(MORNING_HOUR, defaultValue)
    }
    
    /**
     * 设置早晨任务时间（小时）
     */
    fun setMorningHour(hour: Int) {
        prefs.edit().putInt(MORNING_HOUR, hour).apply()
    }
    
    /**
     * 获取早晨任务时间（分钟）
     */
    fun getMorningMinute(defaultValue: Int = 0): Int {
        return prefs.getInt(MORNING_MINUTE, defaultValue)
    }
    
    /**
     * 设置早晨任务时间（分钟）
     */
    fun setMorningMinute(minute: Int) {
        prefs.edit().putInt(MORNING_MINUTE, minute).apply()
    }
    
    /**
     * 获取中午任务时间（小时）
     */
    fun getNoonHour(defaultValue: Int = 12): Int {
        return prefs.getInt(NOON_HOUR, defaultValue)
    }
    
    /**
     * 设置中午任务时间（小时）
     */
    fun setNoonHour(hour: Int) {
        prefs.edit().putInt(NOON_HOUR, hour).apply()
    }
    
    /**
     * 获取中午任务时间（分钟）
     */
    fun getNoonMinute(defaultValue: Int = 0): Int {
        return prefs.getInt(NOON_MINUTE, defaultValue)
    }
    
    /**
     * 设置中午任务时间（分钟）
     */
    fun setNoonMinute(minute: Int) {
        prefs.edit().putInt(NOON_MINUTE, minute).apply()
    }
    
    /**
     * 获取晚上任务时间（小时）
     */
    fun getEveningHour(defaultValue: Int = 22): Int {
        return prefs.getInt(EVENING_HOUR, defaultValue)
    }
    
    /**
     * 设置晚上任务时间（小时）
     */
    fun setEveningHour(hour: Int) {
        prefs.edit().putInt(EVENING_HOUR, hour).apply()
    }
    
    /**
     * 获取晚上任务时间（分钟）
     */
    fun getEveningMinute(defaultValue: Int = 0): Int {
        return prefs.getInt(EVENING_MINUTE, defaultValue)
    }
    
    /**
     * 设置晚上任务时间（分钟）
     */
    fun setEveningMinute(minute: Int) {
        prefs.edit().putInt(EVENING_MINUTE, minute).apply()
    }
    
    /**
     * 批量设置时间
     */
    fun setTimeSettings(
        morningHour: Int? = null,
        morningMinute: Int? = null,
        noonHour: Int? = null,
        noonMinute: Int? = null,
        eveningHour: Int? = null,
        eveningMinute: Int? = null
    ) {
        val editor = prefs.edit()
        morningHour?.let { editor.putInt(MORNING_HOUR, it) }
        morningMinute?.let { editor.putInt(MORNING_MINUTE, it) }
        noonHour?.let { editor.putInt(NOON_HOUR, it) }
        noonMinute?.let { editor.putInt(NOON_MINUTE, it) }
        eveningHour?.let { editor.putInt(EVENING_HOUR, it) }
        eveningMinute?.let { editor.putInt(EVENING_MINUTE, it) }
        editor.apply()
    }
}
